package com.wushi.lenovo.asia5b.app_widget;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.webkit.WebView;

/**
 * ================================================
 * Created by ${chenyuexueer}
 * 时间： 2018/9/5.
 * 说明：
 * <p>
 * 由于WebView没有对外提供滚动监听方法
 * 只有protected void onScrollChanged(final int l, final int t, final int oldl,final int oldt) {}，
 * 但这个方法并没有对外暴露
 * <p>
 * 所以
 * <p>
 * 重写WebView，提供监听方法
 * ================================================
 */
public class ScorllWebView extends WebView {
    public ScorllWebView(Context context) {
        super(context);
    }

    public ScorllWebView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ScorllWebView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public ScorllWebView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }


    //------------------------------------WebView的滚动监听   重写部分-----------------------------------
    private OnScrollChangedCallback mOnScrollChangedCallback;


    @Override
    protected void onScrollChanged(final int l, final int t, final int oldl, final int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);


        if (mOnScrollChangedCallback != null) {
            mOnScrollChangedCallback.onScroll(l - oldl, t - oldt);
            mOnScrollChangedCallback.onScroll(l, t, oldl, oldt);
        }
    }

    public OnScrollChangedCallback getOnScrollChangedCallback() {
        return mOnScrollChangedCallback;
    }

    public void setOnScrollChangedCallback(final OnScrollChangedCallback onScrollChangedCallback) {
        mOnScrollChangedCallback = onScrollChangedCallback;
    }

    /**
     * 在activity/fragment 实现这个接口
     */
    public static interface OnScrollChangedCallback {
        public void onScroll(int dx, int dy);

        public void onScroll(int l, int t, int oldl, int oldt);
    }
    //------------------------------------WebView的滚动监听   重写部分-----------------------------------


    //------------------------------------WebView的ViewPager嵌套WebView滑动冲突解决（并不是很完美）---------------------
    //最好的办法就是与JS配合，js告诉Android哪部分需要requestDisallowInterceptTouchEvent(false|true)
    private boolean isScrollX = false;

    @Override
    public boolean onTouchEvent(MotionEvent event) {

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                isScrollX = false;
                //事件由webview处理
                getParent().getParent().requestDisallowInterceptTouchEvent(true);
                break;
            case MotionEvent.ACTION_MOVE:
                //嵌套Viewpager时
                getParent().getParent().requestDisallowInterceptTouchEvent(!isScrollX);
                break;
            default:
                getParent().getParent().requestDisallowInterceptTouchEvent(false);
        }

        return super.onTouchEvent(event);
    }

    //当webview滚动到边界时执行
    @Override
    protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
        super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
        isScrollX = clampedX;
    }
    //------------------------------------WebView的ViewPager嵌套WebView滑动冲突解决（并不是很完美）---------------------
}
